package org.jeecg.cn.edu.scau.vm.node.domain;

import lombok.*;
import org.jetbrains.annotations.NotNull;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class NodeLoadData implements Serializable,Comparable<NodeLoadData> {
    /**
     * CPU使用率,百分比单位
     */
    private String cpuUS;
    /**
     * CPU空闲率,百分比单位
     */
    private String cpuFree;
    /**
     * 磁盘使用率,百分比单位
     */
    private String diskUS;
    /**
     * 磁盘总量
     */
    private String diskTotal;
    /**
     * 磁盘空闲量
     */
    private String diskFree;
    /**
     * 磁盘使用量,百分比单位
     */
    private String diskUser;
    /**
     * 内存利用率,百分比单位
     */
    private String ramUS;
    /**
     * 内存总量
     */
    private String ramTotal;
    /**
     * 内存可使用总量
     */
    private String ramUser;
    /**
     * 节点ID
     */
    private String nodeId;

    @Override
    public int compareTo(@NotNull NodeLoadData e2) {
        // 1. 首先使用内存可用空间最大的节点
        double ramUserE1 = Double.parseDouble(this.getRamUser());
        double ramUserE2 = Double.parseDouble(e2.getRamUser());
        if (ramUserE1 > ramUserE2) {
            return -1;
        } else if (ramUserE1 < ramUserE2) {
            return 1;
        }
        // 2. 其次选用CPU空闲率最高的节点
        double cpuFreeE1 = Double.parseDouble(this.getCpuFree());
        double cpuFreeE2 = Double.parseDouble(e2.getCpuFree());
        if (cpuFreeE1 > cpuFreeE2) {
            return -1;
        } else if (cpuFreeE1 < cpuFreeE2) {
            return 1;
        }
        // 3. 选用硬盘可用空间最大的节点
        double diskFreeE1 = Double.parseDouble(this.getDiskFree());
        double diskFreeE2 = Double.parseDouble(e2.getDiskFree());
        if (diskFreeE1 > diskFreeE2) {
            return -1;
        } else if (diskFreeE1 < diskFreeE2) {
            return 1;
        }
        // 4. 如果还是完全一样,根据NodeID
        return this.getNodeId().compareTo(e2.getNodeId());
    }
}

